#include <stdio.h>

#define MAXSIZE 10

struct SeqList {
	int data[MAXSIZE];
	int index;
};

typedef struct SeqList SeqList;

// 初始化顺序表 
void InitSeqList(SeqList *sl)
{
	for (int i; i < MAXSIZE; i++) {
		sl->data[i] = 0;
	}
	sl->index = 0;
}

// 删除顺序表 
void DelSeqList(SeqList *sl)
{
	for (int i; i < MAXSIZE; i++) {
		sl->data[i] = 0;
	}
	sl->index = 0;
}

// 在指定位置插入数据，位置以0开始
int InsertSeqList(SeqList *sl, int pos, int data)
{
	// 检查插入位置是否超出顺序表的范围 
	if (pos < 0 || pos > sl->index)
		return -1;

	// 检查顺序表是否已满
	if (sl->index == MAXSIZE)
		return -2;

	// 开始在位置pos插入元素data
	for (int i = sl->index; i > pos; i--) {
		sl->data[i] = sl->data[i - 1];
	}
	sl->data[pos] = data;
	sl->index += 1;

	return 0;
}

// 删除指定位置的数据并返回该数据 
int RemoveSeqList(SeqList *sl, int pos, int *data)
{
	// 检查位置是否合法
	if (pos >= sl->index || pos < 0)
		return -1;

	*data = sl->data[pos];
	for (int i = pos; i < sl->index - 1; i++) {
		sl->data[i] = sl->data[i + 1];
	}
	sl->index -= 1;
    sl->data[sl->index] = 0;

	return 0;
}

// 查找
int GetSeqList(SeqList *sl, int pos, int *data)
{
	// 检查位置是否合法
	if (pos >= sl->index || pos < 0)
		return -1;

	*data = sl->data[pos];
	return 0;
}

// 判满
int SeqListFull(SeqList *sl)
{
	return sl->index == MAXSIZE;
}

// 判空
int SeqListEmpty(SeqList *sl)
{
	return sl->index == 0;
}

void PrintSeqList(SeqList *sl)
{
	printf("index: %d\n", sl->index);
	printf("data: ");
	for (int i = 0; i < MAXSIZE; i++) {
		printf("%d ", sl->data[i]);
	}
	printf("\n=======================\n");
}

int main()
{
	printf("顺序表");
	int data[5] = {0, 1, 2, 3, 4};
	SeqList sl;
	int d = 0;
	InitSeqList(&sl);
	PrintSeqList(&sl);
	InsertSeqList(&sl, 0, data[0]);
	PrintSeqList(&sl);
	InsertSeqList(&sl, 1, data[1]);
	PrintSeqList(&sl);
	InsertSeqList(&sl, 2, data[2]);
	PrintSeqList(&sl);
	InsertSeqList(&sl, 3, data[3]);
	PrintSeqList(&sl);
	InsertSeqList(&sl, 4, data[4]);
	PrintSeqList(&sl);
	RemoveSeqList(&sl, 4, &d);
	printf("d: %d\n", d);
	PrintSeqList(&sl);
	RemoveSeqList(&sl, 0, &d);
	printf("d: %d\n", d);
	PrintSeqList(&sl);
	RemoveSeqList(&sl, 1, &d);
	printf("d: %d\n", d);
	PrintSeqList(&sl);
	InsertSeqList(&sl, 7, 10);
	PrintSeqList(&sl);
	InsertSeqList(&sl, -2, 2);
	PrintSeqList(&sl);
	InsertSeqList(&sl, 2, 6);
	PrintSeqList(&sl);
	InsertSeqList(&sl, 3, 3);
	PrintSeqList(&sl);
	InsertSeqList(&sl, 4, 8);
	PrintSeqList(&sl);
	InsertSeqList(&sl, 2, 23);
	PrintSeqList(&sl);
	for (int i = 0; i < sl.index; i++) {
		GetSeqList(&sl, i, &d);
		printf("[%d]d: %d\n", i, d);
	}

	return 0;
}
